요약
안드로이드 4대 컴포넌트는 앱을 구성하기 위해 필요한 4개의 요소(Activity, Service, Broadcast Receiver, Content Provider)를 의미한다. 각각의 컴포넌트는 다음과 같은 기능 역할을 담당하고 상황에 맞게 전부 사용된다.
- Activity : 사용자와 상호작용을 담당
- Service : 백그라운드에서 어떠한 작업을 처리하는 역할
- Broadcast Receiver : OS로부터 각종 이벤트와 정보를 핸들링하는 역할
- Content Provier : 각종 데이터를 관리하고 제공하는 역할
4대 컴포넌트의 등장
액티비티(Activity)
사용자와의 상호작용을 담당하는 화면 단위 컴포넌트입니다. 즉 UI 담당이라고 생각하면 편합니다. 앱을 실행하면 앱의 전체를 한 번에 호출하는 게 아닌 앱의 액티비티를 호출합니다. 액티비티는 생명주기 관련 메서드들을 재정의하여 원하는 기능을 구현할 수 있습니다.
예제 코드
class MainActivity : AppComparActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}액티비티의 특징
- 액티비티들은 인텐트(Intent)를 이용해서 서로 application의 액티비티를 호출할 수 있습니다.
- 2개 이상의 액티비티는 동시에 display할 수 없습니다.
- 1개 이상의 View에는 하나 이상의 액티비티가 존재합니다.
- 액티비티 내에 프래그먼트를 추가하여 화면을 분할시킬 수 있습니다.
Note
- Activity에 비니지스 로직 넣지 말기 X
- onCreate()에 모든 로직 넣는 실수 금지 X
- Navigation Component 사용해서 화면 이동 관리하기! O
Service
백그라운드에서 어떠한 작업을 처리하기 위해서 주요 사용하는 컴포넌트입니다.
예제 코드
class MyService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
return START_STICKY
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
}서비스의 특징
- UI 없음
- 앱 종료 후에도 동작 가능
Note
- Android 8+ → Foreground Service 필수
- Notification 없으면 죽음!
- 단순한 작업은 Service 대신 WorkManager 사용(권장)
- 무거운 작업 = Coroutine + Worker 조합
Broadcast Receiver
Broadcast Receiver는 안드로이드 OS로부터 각종 이벤트와 정보를 핸들링하는 컴포넌트이다.
예제 코드
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
Log.d("Receiver", "부팅 완료")
}
}
}서비스 특징
- UI 없음
- 이벤트 기반 동작
Content Provider
Content Provider의 경우 각종 데이터를 관리하고 다른 앱 간 데이터 공유용 컴포넌트이다.
예제 코드
val cursor = contentResolver.query(
ContactsContract.CommonDateKinds.Phone.CONTENT_URI,
null,
null,
null,
null
)서비스 특징
- CRUD 기반 데이터 접근
- ContentResolver 통한 접근
Note
- 내부 앱이면 굳이 ContentProvider 쓰지 말기
- 외부 공유 필요할 때만 사용
- 권한 설정 안 하면 데이터 유출 위험 있음!